﻿Imports System.Text
Public Class frmGeral
    Inherits formPadrao

    Dim Sep As Char
    Dim Nombre As Double
    Public WithEvents ucPreambulo As New ucPreambulo
    Private nomeDiretorio As String = Nothing
    Public WithEvents btnLimpar As System.Windows.Forms.Button
    Private registro As New registroVO
    Private mensagem As String
    Private erroNivel As Integer = 0
    Private _id_natureza As Integer = 0
    Private _id_tipo_pericia = 0
    Private _ehArmaBranca As Boolean = False

    Public Property EHARMABRANCA() As Boolean
        Get
            Return _ehArmaBranca
        End Get
        Set(ByVal value As Boolean)
            _ehArmaBranca = value
        End Set
    End Property


    Public Property getUcPreambulo() As ucPreambulo

        Get
            Return ucPreambulo

        End Get

        Set(ByVal value As ucPreambulo)
            ucPreambulo = value

        End Set

    End Property


    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        pnlDados.Controls.Add(ucPreambulo)
        If Not DesignMode Then
            Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
            pnlDados.AutoSize = True
            pnlArma.AutoSize = True
            Me.AutoScroll = True
        End If
    End Sub


    Private Sub frmGeral_Load(sender As Object, e As EventArgs) Handles Me.Load

        Try
            Me.WindowState = FormWindowState.Maximized
            ucPreambulo.ucPerito.Enabled = True
            ucPreambulo.selecionaIdTipoPericia = ucPreambulo.ID_TIPO_PERICIA
            ucPreambulo.selecionaIdNatureza = ucPreambulo.ID_NATUREZA

            _id_tipo_pericia = ucPreambulo.ID_TIPO_PERICIA
            _id_natureza = ucPreambulo.ID_NATUREZA


            If EHARMABRANCA Then
                ucPreambulo.lblTitulo.Text = "EFICIÊNCIA DE ARMA BRANCA"
                pnlArma.Visible = True
                ucPreambulo.pnlNatureza.Enabled = False

              
            Else
                ucPreambulo.lblTitulo.Text = "LAUDO GERAL"
                pnlArma.Visible = False
                ucPreambulo.pnlNatureza.Enabled = True
            End If

            Me.ControlBox = False
            If generica.gravaBanco Then
                ucPreambulo.btnBuscaLaudo.Enabled = True
            Else
                ucPreambulo.btnBuscaLaudo.Enabled = False
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    '--------------------------------------------------------------------------------------------------------------------------------
    ' FUNÇÃO QUE IRÁ GERAR O LAUDO
    '--------------------------------------------------------------------------------------------------------------------------------
    Private Sub geraLaudo()

        generica.tempo = Now
        Dim oWordTemp As New WordAppl
        Dim registroBo As New registroBO
        Dim regBO As New registroBO

        '-----------------------------------------------------------------------------------------
        ' ABRE O ARQUIVO WORD
        '-----------------------------------------------------------------------------------------

        If registroGlobal.registroPincipal.ID_REGISTRO > 0 Or ucPreambulo.ehNovo Then

            pb.zeraContador()
            pb.stepBarra(10)
            pb.Visible = True
            pb.stepBarra(10)
            '-----------------------------------------------------------------------------------------
            ' GRAVA REGISTRO NA BASE DE DADOS
            '-----------------------------------------------------------------------------------------
            pb.stepBarra(10)
            Try

                If generica.gravaBanco Then

                    '------------------------------------------------------------------------------------
                    ' VERFICA SE É UM NOVO REGISTRO OU SE É UM REGISTRO JÁ ARMAZENADO NA BASE DE DADOS
                    '------------------------------------------------------------------------------------
                    pb.stepBarra(10)

                    Dim provas As New StringBuilder
                    Dim textoProva As String = String.Empty

                    If EHARMABRANCA Then
                        provas.Append(txtArma.Text)
                    End If


                    If provas.ToString.Length > 250 Then
                        textoProva = provas.ToString.Substring(0, 250)
                    Else
                        textoProva = provas.ToString
                    End If

                    pb.stepBarra(10)

                    Dim registroGravado As Integer



                    If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO = False Then

                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------


                        If EHARMABRANCA Then
                            nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                  ucPreambulo.getNumeroLaudo, "EFICIENCIA ARMA BRANCA", ucPreambulo.getIndiciado, ucPreambulo.getVitima)
                        Else
                            nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                      ucPreambulo.getNumeroLaudo, "LAUDO GERAL", ucPreambulo.getIndiciado, ucPreambulo.getVitima)
                        End If
                       

                        registroGravado = regBO.updateRegistro(registroGlobal.registroPincipal, _
                                                               textoProva, ucPreambulo.getIdPeritoSelecionado, _
                                                               nomeDiretorio, ucPreambulo)
                        pb.stepBarra(10)
                        mensagem = (" O laudo n°" & registroGravado & " foi atualizado com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                    Else

                        Dim reg As New registroVO
                        Dim ultimo As Integer = regBO.getUltimoRegistro
                        Dim registroTemporario As Integer = 0
                        If ultimo <> ucPreambulo.getNumeroLaudo Then
                            registroTemporario = ucPreambulo.getNumeroLaudo
                            ucPreambulo.getNumeroLaudo = ultimo
                        End If
                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        If EHARMABRANCA Then
                            nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                  ucPreambulo.getNumeroLaudo, "EFICIENCIA DE ARMA BRANCA", ucPreambulo.getIndiciado, ucPreambulo.getVitima)
                        Else
                            nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                      ucPreambulo.getNumeroLaudo, "LAUDO GERAL", ucPreambulo.getIndiciado, ucPreambulo.getVitima)
                        End If
                        

                        reg = generica.populaRegistro(ucPreambulo, generica.retornaNomeArquivoCompleto(nomeDiretorio & ".doc", nomeDiretorio), textoProva)
                        registroGravado = regBO.insereRegistro(reg, True)
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                        If registroTemporario = 0 Then
                            mensagem = (" O laudo n°" & registroGlobal.registroPincipal.NUM_REGISTRO & " foi inserido com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        Else
                            mensagem = (" O laudo n°" & ultimo & " foi inserido com sucesso na base de dados. O laudo não foi gravado com o número inicial " & registroTemporario & " pelo fato de outro usuário ter inserido este número de laudo no banco de dados. Clique no ícone do WORD para visualizar o laudo.")
                        End If
                        pb.stepBarra(10)
                    End If
                    '------------------------------------------------------------------------------------
                    ' INSERE DADOS NA TABELA PONTUACAO
                    '------------------------------------------------------------------------------------
                    Dim pontuacaobo As New pontuacaoBO
                    Dim pontuacao As New pontuacaoVO
                    Dim i As Integer

                    If ucPreambulo.ehNovo Then
                        With pontuacao
                            .USUARIO = New usuarioVO With {.ID_USUARIO = ucPreambulo.getIdPeritoSelecionado}
                            .REGISTRO = New registroVO With {.ID_REGISTRO = registroGlobal.registroPincipal.ID_REGISTRO}
                            .PONTUACAO = registroGlobal.registroPincipal.NATUREZA.PONTOS_ATENDIMENTO
                            .TIPO_OCORRENCIA = "ATENDIMENTO"
                            .DATA_ALTERACAO = Now
                        End With
                        i = pontuacaobo.inserePontuacao(pontuacao)
                    Else
                        i = pontuacaobo.upDatePontuacao(ucPreambulo.getIdPeritoSelecionado, registroGlobal.registroPincipal)
                    End If
                Else
                    mensagem = ("O sistema está configurado para não gravar registros na base de dados do sistema de registro eletrônico. Para habilitar, clique em configurações > Configurar aplicação e marque a opção <<SIM>>>. Apenas o laudo de n° " & ucPreambulo.getNumeroLaudo & " será gerado. Clique no ícono do WORD para visualizar o documento.")
                End If


        '-------------------------------------------------------------------------------------
        ' INSERE DADOS ITENS DA TABELA NA BASE LOCAL
        '-------------------------------------------------------------------------------------
            Catch ex As Exception
            generica.encerraProcessosWord()
            habilita(False, False, False, False)
            generica.gravaErro(ex)
            erroNivel = 1
            Exit Sub
        End Try

            Try

                Dim diretorio As String = System.Configuration.ConfigurationManager.AppSettings("dirTemplateword")

                If EHARMABRANCA Then
                    oWordTemp.OpenModelo("armaBranca.dot")
                Else
                    oWordTemp.OpenModelo("geral.dot")
                End If

                oWordTemp.SaveAs(nomeDiretorio, nomeDiretorio & ".doc")
                oWordTemp.Quit()
                oWordTemp = Nothing
                '------------------------------------------------------------------------------------------------
                ' CRIA O PREMABULO
                '------------------------------------------------------------------------------------------------
                Dim oWord As New WordAppl
                oWord.Open(nomeDiretorio, nomeDiretorio & ".doc")
                oWord.criaPreambulo(ucPreambulo)
                '------------------------------------------------------------------------------------------------
                ' PREENCHE O CORPO DO DOCUMENTO
                '------------------------------------------------------------------------------------------------

                If EHARMABRANCA Then

                    oWord.FindAndReplacement("<<textoArma>>", txtArma.Text)
                    If rdbSim.Checked Then
                        oWord.FindAndReplacement("<<textoNao>>", String.Empty)
                    Else
                        oWord.FindAndReplacement("<<textoNao>>", " não ")
                    End If


                End If


                oWord.criaAssinatura(ucPreambulo)
                oWord.Save()
                oWord.Quit()
                oWord = Nothing
                pb.stepBarra(10)

                '-------------------------------------------------------dim----------------------------------------------------------------
                ' ROTINA PARA TRATAR DO ERRO CASO OCORRA INCONSISTÊNCIA NA BASE DE DADOS
                '-----------------------------------------------------------------------------------------------------------------------

            Catch exc As Exception
                generica.encerraProcessosWord()
                generica.gravaErro(exc)
                erroNivel = 2
                Exit Sub
            End Try


        Else

            '----------------------------------------------------------------------------------------------------------------------------
            ' CASO SEJA UM ARQUIVO QUE JÁ SE ENCONTRA CADASTRADO NA BASE DE DADOS
            '----------------------------------------------------------------------------------------------------------------------------
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                habilita(False)
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " já existe registrado na base de dados.Clique no ícone do WORD para visualizar o laudo.")
            Else
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " não foi encontrado na base de dados.")
            End If
        End If
        MsgBox(mensagem)
    End Sub
    Private Sub habilita(ByVal habilita As Boolean, _
                         Optional ByVal habilitaBarra As Boolean = Nothing, _
                         Optional ByVal habilitaVerWord As Boolean = Nothing, _
                         Optional ByVal habilitaNatureza As Boolean = False, _
                         Optional ByVal habilitaTextoArma As Boolean = Nothing)

        ucPreambulo.btnVerWord.Visible = habilitaVerWord
        ucPreambulo.btnGeraLaudo.Enabled = habilita
        ucPreambulo.habilitaCampos(habilita)
        ucPreambulo.selecionaIdTipoPericia = _id_natureza
        ucPreambulo.pnlNatureza.Enabled = habilitaNatureza
        ucPreambulo.selecionaIdTipoPericia = _id_tipo_pericia
        ucPreambulo.selecionaIdNatureza = _id_natureza
        pb.Visible = habilitaBarra
        pb.zeraContador()



        If Not IsNothing(habilitaBarra) Then
            pb.Visible = habilitaBarra
            pb.zeraContador()
        End If

        If Not IsNothing(habilitaTextoArma) Then
            pnlArma.Visible = habilitaTextoArma
            pnlArma.Enabled = habilitaTextoArma
        End If
    End Sub

    Private Sub btnGerarLaudo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Dim isOk As Boolean = False
        Try
            If (generica.validaCampos(ucPreambulo)) Then
                geraLaudo()
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try

    End Sub

    Private Sub btnWord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try

    End Sub


    Private Sub chamaEventoLimpaCampos(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickLimpaCampos
        Try
            'ucPreambulo.limparCampos()
            'limpaCampos()
            'ucPreambulo.populaDados()
            'habilita(True)


            ucPreambulo.limparCampos()
            ucPreambulo.populaDados()
            limpaCampos()

            If EHARMABRANCA Then
                habilita(True, False, False, False, True)
                ucPreambulo.ucNatureza.Enabled = False
            Else
                habilita(True, False, False, True, False)
                ucPreambulo.ucNatureza.Enabled = True
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoGeraLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickGeraLaudo
        Try
            'COPIAR ESTE TRECHO
            Dim regBO As New registroBO
            Dim registroVOTemp As New registroVO
            Dim novoRegistro As Integer = 0
            registroVOTemp = regBO.getRegistroSimplificado(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno)

            If registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO And ucPreambulo.ehNovo Then
                novoRegistro = regBO.getUltimoRegistro
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi inserido na base de dados por outro usuário logado no sistema. O laudo será gerado com o número " & novoRegistro)
                ucPreambulo.getNumeroLaudo = novoRegistro

            ElseIf registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO Then
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi atualizado na base de dados por outro usuário logado no sistema.")
                Exit Sub
            End If

            'FIM DO TRECHO

            If (generica.validaCampos(ucPreambulo)) Then

                pb.Visible = True
                generica.salvaPreambulo(ucPreambulo)
                geraLaudo()
                If erroNivel > 0 Then

                    If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then
                        MsgBox("O sistema recuperou de um erro grave e nenhuma informação foi gravada. Para registrar um novo laudo, clique em novo laudo")
                        erroNivel = 0
                        ucPreambulo.btnLimpaCampos.PerformClick()
                    End If

                Else
                    ucPreambulo.txtDataEntrada.Enabled = False
                    habilita(False, False, True, False)
                End If
            End If


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoVisualizaWord(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickVisualizaWord
        Try

            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord("", "", registroGlobal.registroPincipal.NOME_DIRETORIO)
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub limpaCampos()
        txtArma.Text = String.Empty
        rdbSim.Checked = True
    End Sub

    Private Sub chamaEventoNovoLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickNovoLaudo
        Try
            ucPreambulo.limparCampos()
            ucPreambulo.populaDados()
            limpaCampos()

            If EHARMABRANCA Then
                habilita(True, False, False, False, True)
                ucPreambulo.ucNatureza.Enabled = False
            Else
                habilita(True, False, False, True, False)
                ucPreambulo.ucNatureza.Enabled = True
            End If

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Public Sub chamaEventoBuscaLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickBuscaLaudo
        Try

            ucPreambulo.getIdNatureza = _id_natureza
            ucPreambulo.buscaDadosLaudo(ucPreambulo, Me.MdiParent)
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then

                If EHARMABRANCA Then
                    habilita(False, , True, False, True)
                Else
                    habilita(False, , True, False, False)
                End If


            Else

                If registroGlobal.registroPincipal.ID_REGISTRO > 0 Then
                    ucPreambulo.getIdNatureza = registroGlobal.registroPincipal.NATUREZA.ID_NATUREZA
                    ucPreambulo.getIdTipoPericia = registroGlobal.registroPincipal.NATUREZA.TIPO_PERICIA.ID_TIPO
                    _id_natureza = registroGlobal.registroPincipal.NATUREZA.ID_NATUREZA
                    _id_tipo_pericia = registroGlobal.registroPincipal.NATUREZA.TIPO_PERICIA.ID_TIPO
                End If
                If EHARMABRANCA Then
                    habilita(True, False, False, False, True)
                Else
                    habilita(True, False, False, False, False)
                End If

            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
End Class